#include <iostream>
using namespace std;

//带参数的宏
#define MYFUNC(a, b) ((a)<(b)?(a):(b))

//内敛函数就是c++中的函数的宏替换
inline int myfunc(int a, int b){
        return a < b? a : b;
}

//inline void printA() c++编译器会报错 1.内联函数必须与函数体的实现写在一起

inline void printA(){
        int a = 10;
        cout<<"a: "<<a<<endl;
}

int main(int argc, char const *argv[]){
        printA();

        //2 c++编译器直接将函数体插入在函数调用的地方
        //3 内联函数省去了普通函数调用时的压栈，跳转和返回的开销
        {
                int a = 10;
                cout<<"a: "<<a<<endl;
        }

        int a = 1;
        int b = 3;
        //int c = myfunc(++a, b); //a=2 b=3 c=2
        int c = MYFUNC(++a, b); //==>宏替换并展开 ((++a)<(b)?(++a):(b))   //a=3 b =3 c=3
        //带函数的宏和直接调用一个函数是不一样的
       
        printf("a = %d \n", a);
        printf("b = %d \n", b);
        printf("c = %d \n", c);
        return 0;
}
